package chapter06

/**
  * create by undeRdoG on  2021-05-31  22:30
  * 凡心所向，素履以往，生如逆旅，一苇以航。
  */
object Test05_Constructor {

  def main(args: Array[String]): Unit = {
   // val student1 = new Student1()

    //val student2 = new Student1("undeRdoG")

    val student3 = new Student1("undeRdoG",25)

  }
}


/*
（1）辅助构造器，函数的名称 this，可以有多个，编译器通过参数的个数及类型来区分。
（2）辅助构造方法不能直接构建对象，必须直接或者间接调用主构造方法。
（3）构造器调用其他另外的构造器，要求被调用构造器必须提前声明。
*/

// 定义一个类
class Student1 {

  var name: String = _

  var age: Int = _

  println("主构造方法被调用")


  /**
    * 定义辅助构造器一
    **/
  def this(name: String) {
    // 直接调用柱构造器
    this()
    println("辅助构造器一被调用")
    this.name = name

    println(s"name : ${name} age: ${age}")
  }


  /**
    * 定义辅助构造器二
    **/
  def this(name: String, age: Int) {
    // 此处直接调用 辅助构造器一 相当于间接的调用了 主构造器
    this(name)
    println("辅助构造器二被调用")
    this.age = age

    println(s"name : ${name} age: ${age}")

  }


}
